import createElement from "./createElement";
import updateChildren from "./updateChildren";

export default function patchVnode(oldVnode, newVnode) {
    // 判断新旧vnode是否是同一个对象
    if (oldVnode === newVnode) return;
    // 判断新vnode有没有text属性
    if (newVnode.text != undefined && (newVnode.children == undefined || newVnode.children.length == 0)) {
        // 新vnode有text属性
        if (newVnode.text !== oldVnode.text) {
            // 如果新虚拟节点的text与旧虚拟节点的text不相同，直接让新的text写入旧的elm中即可。
            // 如果elm中的是children，那么会被替换掉
            oldVnode.elm.innerText = newVnode.text;
        }
    } else {
        // 新vnode没有text属性，有children
        // 判断旧的有没有children
        if (oldVnode.children && oldVnode.children.length > 0) {
            // // 新旧vnode都有children
            // let un = 0;
            // for (let i = 0; i < newVnode.children.length; i++) {
            //     let ch = newVnode.children[i];
            //     let isExist = false;
            //     for (let j = 0; j < oldVnode.children.length; j++) {
            //         if (oldVnode.children[j].sel == ch.sel && oldVnode.children[j].key == ch.key) {
            //             isExist = true;
            //         }
            //     }
            //     if (!isExist) {
            //         let dom = createElement(ch);
            //         ch.elm = dom;
            //         if(un < oldVnode.children.length) {
            //             oldVnode.elm.insertBefore(dom, oldVnode.children[i].elm)
            //         }else{
            //             oldVnode.elm.appendChild(dom);
            //         }
            //     } else {
            //         un++;
            //     }
            // }
            // 老的有children，新的有children
            updateChildren(oldVnode.elm, oldVnode.children, newVnode.children)
        } else {
            // 旧的没有children，新的有children
            // 清空旧的节点的内容
            oldVnode.elm.innerHTML = "";
            // 遍历新的vnode子节点，创建DOM，加入到DOM树中
            for (let i = 0; i < newVnode.length; i++) {
                let dom = createElement(newVnode.children);
                oldVnode.elm.appendChild(dom)
            }
        }
    }
}
